﻿using System;
using System.ComponentModel;
namespace ScintillaNet
{
	/// <summary>
	/// Interface representing the native Scintilla Message Based API. In addition
	/// to wrappers around each of the messages I have included an additional Method
	/// named SendMessageDirect with 9 overloads. This allows you to send messages
	/// to the Scintilla DefWndProc bypassing Windows' SendMessage. Each of the other
	/// methods wrap calls to SendMessageDirect.
	/// 
	/// Scintilla explicetly implements this interface. To use these methods on 
	/// a Scintilla control Cast it as INativeScintilla or use NativeScintilla
	/// property.
	/// 
	/// The reason for this interface is to keep the "regular" interface surface
	/// area of the Scintilla control as clean and .NETish as possible. Also
	/// this means when you want a direct native interface there's no other 
	/// absracted members (Aside from SendMessageDirect ;) cluttering the native
	/// interface.
	/// </summary>
	public interface INativeScintilla
	{
		void AddRefDocument(IntPtr pDoc);
		void AddStyledText(int length, byte[] s);
		void AddText(int length, string s);
		void Allocate(int bytes);
		void AppendText(int length, string s);
		void AssignCmdKey(int keyDefinition, int sciCommand);
		bool AutoCActive();
		void AutoCCancel();
		void AutoCComplete();
		bool AutoCGetAutoHide();
		bool AutoCGetCancelAtStart();
		bool AutoCGetChooseSingle();
		int AutoCGetCurrent();
		bool AutoCGetDropRestOfWord();
		bool AutoCGetIgnoreCase();
		int AutoCGetMaxHeight();
		int AutoCGetMaxWidth();
		char AutoCGetSeparator();
		char AutoCGetTypeSeparator();
		int AutoCPosStart();
		void AutoCSelect(string select);
		event EventHandler<NativeScintillaEventArgs> AutoCSelection;
		void AutoCSetAutoHide(bool autoHide);
		void AutoCSetCancelAtStart(bool cancel);
		void AutoCSetChooseSingle(bool chooseSingle);
		void AutoCSetDropRestOfWord(bool dropRestOfWord);
		void AutoCSetFillUps(string chars);
		void AutoCSetIgnoreCase(bool ignoreCase);
		void AutoCSetMaxHeight(int rowCount);
		void AutoCSetMaxWidth(int characterCount);
		void AutoCSetSeparator(char separator);
		void AutoCSetTypeSeparator(char separatorCharacter);
		void AutoCShow(int lenEntered, string list);
		void AutoCStops(string chars);
		void BackTab();
		void BeginUndoAction();
		void BraceBadLight(int pos1);
		void BraceHighlight(int pos1, int pos2);
		int BraceMatch(int pos, int maxReStyle);
		bool CallTipActive();
		void CallTipCancel();
		event EventHandler<NativeScintillaEventArgs> CallTipClick;
		int CallTipGetPosStart();
		void CallTipSetBack(int colour);
		void CallTipSetFore(int colour);
		void CallTipSetForeHlt(int colour);
		void CallTipSetHlt(int hlStart, int hlEnd);
		void CallTipShow(int posStart, string definition);
		void CallTipUseStyle(int tabsize);
		void Cancel();
		bool CanPaste();
		bool CanRedo();
		bool CanUndo();
		event EventHandler<NativeScintillaEventArgs> Change;
		event EventHandler<NativeScintillaEventArgs> CharAdded;
		void CharLeft();
		void CharLeftExtend();
		void CharLeftRectExtend();
		void CharRight();
		void CharRightExtend();
		void CharRightRectExtend();
		void ChooseCaretX();
		void Clear();
		void ClearAll();
		void ClearAllCmdKeys();
		void ClearCmdKey(int keyDefinition);
		void ClearDocumentStyle();
		void ClearRegisteredImages();
		void Colourise(int start, int end);
		void ConvertEols(int eolMode);
		void Copy();
		void CopyRange(int start, int end);
		void CopyText(int length, string text);
		IntPtr CreateDocument();
		void Cut();
		void DeleteBack();
		void DeleteBackNotLine();
		void DelLineLeft();
		void DelLineRight();
		void DelWordLeft();
		void DelWordRight();
		int DocLineFromVisible(int displayLine);
		void DocumentEnd();
		void DocumentEndExtend();
		void DocumentStart();
		void DocumentStartExtend();
		event EventHandler<NativeScintillaEventArgs> DoubleClick;
		event EventHandler<NativeScintillaEventArgs> DwellEnd;
		event EventHandler<NativeScintillaEventArgs> DwellStart;
		void EditToggleOvertype();
		void EmptyUndoBuffer();
		int EncodeFromUtf8(string utf8, out string encoded);
		void EndUndoAction();
		void EnsureVisible(int line);
		void EnsureVisibleEnforcePolicy(int line);
		int FindColumn(int line, int column);
		int FindText(int searchFlags, ref TextToFind ttf);
		int FormatRange(bool bDraw, ref RangeToFormat pfr);
		void FormFeed();
		int GetAnchor();
		bool GetBackSpaceUnIndents();
		bool GetBufferedDraw();
		int GetCaretFore();
		int GetCaretLineBack();
		int GetCaretLineBackAlpha();
		bool GetCaretLineVisible();
		int GetCaretPeriod();
		bool GetCaretSticky();
		int GetCaretStyle();
		int GetCaretWidth();
		char GetCharAt(int position);
		int GetCodePage();
		int GetColumn(int position);
		int GetControlCharSymbol();
		int GetCurLine(int textLen, out string text);
		int GetCurrentPos();
		int GetCursor();
		IntPtr GetDirectFunction();
		IntPtr GetDirectPointer();
		IntPtr GetDocPointer();
		int GetEdgeColour();
		int GetEdgeColumn();
		int GetEdgeMode();
		bool GetEndAtLastLine();
		int GetEndStyled();
		int GetEolMode();
		int GetFirstVisibleLine();
		bool GetFocus();
		bool GetFoldExpanded(int line);
		uint GetFoldLevel(int line);
		int GetFoldParent(int line);
		int GetHighlightGuide();
		int GetHotSpotActiveBack();
		int GetHotSpotActiveFore();		
		bool GetHotSpotActiveUnderline();
		bool GetHotSpotSingleLine();
		int GetIndicatorCurrent();
		int GetIndicatorValue();
		int GetPositionCache();
		bool GetHScrollBar();
		int GetIndent();
		bool GetIndentationGuides();
		int GetLastChild(int line, int level);
		int GetLayoutCache();
		int GetLength();
		int GetLexer();
		int GetLine(int line, out string text);
		int GetLineCount();
		int GetLineEndPosition(int line);
		int GetLineIndentation(int line);
		int GetLineIndentPosition(int line);
		int GetLineSelEndPosition(int line);
		int GetLineSelStartPosition(int line);
		int GetLineState(int line);
		bool GetLineVisible(int line);
		int GetMarginLeft();
		int GetMarginMaskN(int margin);
		int GetMarginRight();
		bool GetMarginSensitiveN(int margin);
		int GetMarginTypeN(int margin);
		int GetMarginWidthN(int margin);
		int GetMaxLineState();
		int GetModEventMask();
		bool GetModify();
		bool GetMouseDownCaptures();
		int GetMouseDwellTime();
		bool GetOvertype();
		bool GetPasteConvertEndings();
		int GetPrintColourMode();
		int GetPrintMagnification();
		int GetPrintWrapMode();
		void GetProperty(string key, out string value);
		void GetPropertyExpanded(string key, out string value);
		int GetPropertyInt(string key, int @default);
		bool GetReadOnly();
		int GetScrollWidth();
		int GetSearchFlags();
		int GetSelectionEnd();
		int GetSelectionMode();
		int GetSelectionStart();
		void GetSelText(out string text);
		int GetStatus();
		byte GetStyleAt(int position);
		[Obsolete("The modern style indicators make this obsolete, this should always be 7")]
		int GetStyleBits();
		int GetStyleBitsNeeded();
		void GetStyledText(ref TextRange tr);
		bool GetTabIndents();
		int GetTabWidth();
		int GetTargetEnd();
		int GetTargetStart();
		int GetText(int length, out string text);
		int GetTextLength();
		int GetTextRange(ref TextRange tr);
		bool GetTwoPhaseDraw();
		bool GetUndoCollection();
		bool GetUsePalette();
		bool GetUseTabs();
		bool GetViewEol();
		int GetViewWs();
		bool GetVScrollBar();
		int GetWrapMode();
		int GetWrapStartIndent();
		int GetWrapVisualFlags();
		int GetWrapVisualFlagsLocation();
		int GetXOffset();
		int GetZoom();
		void GotoLine(int line);
		void GotoPos(int position);
		void GrabFocus();
		void HideLines(int lineStart, int lineEnd);
		void HideSelection(bool hide);
		void Home();
		void HomeDisplay();
		void HomeDisplayExtend();
		void HomeExtend();
		void HomeRectExtend();
		void HomeWrap();
		void HomeWrapExtend();
		event EventHandler<NativeScintillaEventArgs> HotSpotClick;
		event EventHandler<NativeScintillaEventArgs> HotSpotDoubleclick;
		uint IndicatorAllOnFor(int position);
		void IndicatorClearRange(int position, int fillLength);
		event EventHandler<NativeScintillaEventArgs> IndicatorClick;
		void IndicatorFillRange(int position, int fillLength);
		int IndicatorEnd(int indicator, int position);
		event EventHandler<NativeScintillaEventArgs> IndicatorRelease;
		int IndicatorStart(int indicator, int position);
		int IndicatorValueAt(int indicator, int position);
		int IndicGetFore(int indicatorNumber);
		int IndicGetStyle(int indicatorNumber);
		bool IndicGetUnder(int indicatorNumber);
		void IndicSetFore(int indicatorNumber, int colour);
		void IndicSetStyle(int indicatorNumber, int indicatorStyle);
		void IndicSetUnder(int indicatorNumber, bool under);
		void InsertText(int pos, string text);
		event EventHandler<NativeScintillaEventArgs> Key;
		void LineCopy();
		void LineCut();
		void LineDelete();
		void LineDown();
		void LineDownExtend();
		void LineDownRectExtend();
		void LineDuplicate();
		void LineEnd();
		void LineEndDisplay();
		void LineEndDisplayExtend();
		void LineEndExtend();
		void LineEndRectExtend();
		void LineEndWrap();
		void LineEndWrapExtend();
		int LineFromPosition(int pos);
		int LineLength(int line);
		void LineScroll(int columns, int lines);
		void LineScrollDown();
		void LineScrollUp();
		void LinesJoin();
		int LinesOnScreen();
		void LinesSplit(int pixelWidth);
		void LineTranspose();
		void LineUp();
		void LineUpExtend();
		void LineUpRectExtend();
		void LoadLexerLibrary(string path);
		void LowerCase();
		event EventHandler<NativeScintillaEventArgs> MacroRecord;
		event EventHandler<NativeScintillaEventArgs> MarginClick;
		int MarkerAdd(int line, int markerNumber);
		void MarkerAddSet(int line, uint markerMask);
		void MarkerDefine(int markerNumber, int markerSymbol);
		void MarkerDefinePixmap(int markerNumber, string xpm);
		void MarkerDelete(int line, int markerNumber);
		void MarkerDeleteAll(int markerNumber);
		void MarkerDeleteHandle(int handle);
		int MarkerGet(int line);
		int MarkerLineFromHandle(int handle);
		int MarkerNext(int lineStart, uint markerMask);
		int MarkerPrevious(int lineStart, uint markerMask);
		void MarkerSetAlpha(int markerNumber, int alpha);
		void MarkerSetBack(int markerNumber, int colour);
		void MarkerSetFore(int markerNumber, int colour);
		event EventHandler<NativeScintillaEventArgs> Modified;
		event EventHandler<NativeScintillaEventArgs> ModifyAttemptRO;
		void MoveCaretInsideView();
		event EventHandler<NativeScintillaEventArgs> NeedShown;
		void NewLine();
		void Null();
		void PageDown();
		void PageDownExtend();
		void PageDownRectExtend();
		void PageUp();
		void PageUpExtend();
		void PageUpRectExtend();
		event EventHandler<NativeScintillaEventArgs> Painted;
		void ParaDown();
		void ParaDownExtend();
		void ParaUp();
		void ParaUpExtend();
		void Paste();
		int PointXFromPosition(int position);
		int PointYFromPosition(int position);
		int PositionAfter(int position);
		int PositionBefore(int position);
		int PositionFromLine(int line);
		int PositionFromPoint(int x, int y);
		int PositionFromPointClose(int x, int y);
		void Redo();
		void RegisterImage(int type, string xpmData);
		void ReleaseDocument(IntPtr pDoc);
		void ReplaceSel(string text);
		int ReplaceTarget(int length, string text);
		int ReplaceTargetRE(int length, string text);
		event EventHandler<NativeScintillaEventArgs> SavePointLeft;
		event EventHandler<NativeScintillaEventArgs> SavePointReached;
		void ScrollCaret();
		void SearchAnchor();
		int SearchInTarget(int length, string text);
		int SearchNext(int searchFlags, string text);
		int SearchPrev(int searchFlags, string text);
		void SelectAll();
		void SelectionDuplicate();
		bool SelectionIsRectangle();
		IntPtr SendMessageDirect(uint msg, IntPtr wParam, IntPtr lParam);
		int SendMessageDirect(uint msg);
		int SendMessageDirect(uint msg, int wParam);
		int SendMessageDirect(uint msg, VOID wParam, int lParam);
		int SendMessageDirect(uint msg, VOID wParam, string lParam);
		int SendMessageDirect(uint msg, int wParam, int lParam);
		int SendMessageDirect(uint msg, int wParam, uint lParam);
		int SendMessageDirect(uint msg, bool wParam, int lParam);
		int SendMessageDirect(uint msg, int wParam, bool lParam);
		int SendMessageDirect(uint msg, string wParam);
		int SendMessageDirect(uint msg, bool wParam);
		int SendMessageDirect(uint msg, string wParam, int lParam);
		int SendMessageDirect(uint msg, int wParam, string lParam);
		int SendMessageDirect(uint msg, int wParam, out string text);
		int SendMessageDirect(uint msg, out string text);
		int SendMessageDirect(uint msg, IntPtr wParam, out string lParam, int length);
		int SendMessageDirect(uint msg, string wParam, out string lParam);
		int SendMessageDirect(uint msg, string wParam, string lParam);
		void SetAnchor(int position);
		void SetBackSpaceUnIndents(bool bsUnIndents);
		void SetBufferedDraw(bool isBuffered);
		void SetCaretFore(int alpha);
		void SetCaretLineBack(int show);
		void SetCaretLineBackAlpha(int alpha);
		void SetCaretLineVisible(bool colour);
		void SetCaretPeriod(int milliseconds);
		void SetCaretSticky(bool useCaretStickyBehaviour);
		void SetCaretStyle(int style);
		void SetCaretWidth(int pixels);
		void SetCharsDefault();
		void SetCodePage(int codePage);
		void SetControlCharSymbol(int symbol);
		void SetCurrentPos(int position);
		void SetCursor(int curType);
		void SetDocPointer(IntPtr pDoc);
		void SetEdgeColour(int colour);
		void SetEdgeColumn(int column);
		void SetEdgeMode(int mode);
		void SetEndAtLastLine(bool endAtLastLine);
		void SetEolMode(int eolMode);
		void SetFocus(bool focus);
		void SetFoldExpanded(int line, bool expanded);
		void SetFoldFlags(int flags);
		void SetFoldLevel(int line, uint level);
		void SetFoldMarginColour(bool useSetting, int colour);
		void SetFoldMarginHiColour(bool useSetting, int colour);
		void SetHighlightGuide(int column);
		void SetHotspotActiveBack(bool useHotSpotBackColour, int colour);
		void SetHotspotActiveFore(bool useHotSpotForeColour, int colour);
		void SetHotspotActiveUnderline(bool underline);
		void SetHotspotSingleLine(bool singleLine);
		void SetHScrollBar(bool visible);
		void SetIndent(int widthInChars);
		void SetIndentationGuides(bool view);
		void SetIndicatorCurrent(int indicator);
		void SetIndicatorValue(int value);
		void SetKeywords(int keywordSet, string keyWordList);
		void SetLayoutCache(int cacheMode);
		int SetLengthForEncode(int bytes);
		void SetLexer(int lexer);
		void SetLexerLanguage(string name);
		void SetLineIndentation(int line, int indentation);
		void SetLineState(int line, int value);
		void SetMarginLeft(int pixels);
		void SetMarginMaskN(int margin, int mask);
		void SetMarginRight(int pixels);
		void SetMarginSensitiveN(int margin, bool sensitive);
		void SetMarginTypeN(int margin, int type);
		void SetMarginWidthN(int margin, int pixelWidth);
		void SetModEventMask(int modEventMask);
		void SetMouseDownCaptures(bool captures);
		void SetMouseDwellTime(int mouseDwellTime);
		void SetOvertype(bool overType);
		void SetPasteConvertEndings(bool convert);
		void SetPositionCache(int size);
		void SetPrintColourMode(int mode);
		void SetPrintMagnification(int magnification);
		void SetPrintWrapMode(int wrapMode);
		void SetProperty(string key, string value);
		void SetReadOnly(bool readOnly);
		void SetSavePoint();
		void SetScrollWidth(int pixelWidth);
		void SetSearchFlags(int searchFlags);
		void SetSel(int anchorPos, int currentPos);
		void SetSelBack(bool useSelectionBackColour, int colour);
		void SetSelectionEnd(int position);
		void SetSelectionMode(int mode);
		void SetSelectionStart(int position);
		void SetSelFore(bool useSelectionForeColour, int colour);
		void SetStatus(int status);
		[Obsolete("The modern style indicators make this obsolete, this should always be 7")]
		void SetStyleBits(int bits);
		void SetStyling(int length, int style);
		void SetStylingEx(int length, string styles);
		void SetTabIndents(bool tabIndents);
		void SetTabWidth(int widthInChars);
		void SetTargetEnd(int pos);
		void SetTargetStart(int pos);
		void SetText(string text);
		void SetTwoPhaseDraw(bool twoPhase);
		void SetUndoCollection(bool collectUndo);
		void SetUsePalette(bool allowPaletteUse);
		void SetUseTabs(bool useTabs);
		void SetViewEol(bool visible);
		void SetViewWs(int wsMode);
		void SetVisiblePolicy(int visiblePolicy, int visibleSlop);
		void SetVScrollBar(bool visible);
		void SetWhitespaceBack(bool useWhitespaceBackColour, int colour);
		void SetWhitespaceChars(string chars);
		void SetWhitespaceFore(bool useWhitespaceForeColour, int colour);
		void SetWordChars(string chars);
		void SetWrapMode(int wrapMode);
		void SetWrapStartIndent(int indent);
		void SetWrapVisualFlags(int wrapVisualFlags);
		void SetWrapVisualFlagsLocation(int wrapVisualFlagsLocation);
		void SetXCaretPolicy(int caretPolicy, int caretSlop);
		void SetXOffset(int xOffset);
		void SetYCaretPolicy(int caretPolicy, int caretSlop);
		void SetZoom(int zoomInPoints);
		void ShowLines(int lineStart, int lineEnd);
		void StartRecord();
		void StartStyling(int position, int mask);
		void StopRecord();
		void StutteredPageDown();
		void StutteredPageDownExtend();
		void StutteredPageUp();
		void StutteredPageUpExtend();
		void StyleClearAll();
		event EventHandler<NativeScintillaEventArgs> StyleNeeded;
		void StyleResetDefault();
		int StyleGetBack(int styleNumber);
		bool StyleGetBold(int styleNumber);
		int StyleGetCase(int styleNumber);
		bool StyleGetChangeable(int styleNumber);
		int StyleGetCharacterSet(int styleNumber);
		bool StyleGetEOLFilled(int styleNumber);
		void StyleGetFont(int styleNumber, out string fontName);
		int StyleGetFore(int styleNumber);
		bool StyleGetHotSpot(int styleNumber);
		bool StyleGetItalic(int styleNumber);
		int StyleGetSize(int styleNumber);
		bool StyleGetUnderline(int styleNumber);
		bool StyleGetVisible(int styleNumber);
		void StyleSetBack(int styleNumber, int colour);
		void StyleSetBold(int styleNumber, bool bold);
		void StyleSetCase(int styleNumber, int caseMode);
		void StyleSetChangeable(int styleNumber, bool changeable);
		void StyleSetCharacterSet(int styleNumber, int charSet);
		void StyleSetEOLFilled(int styleNumber, bool eolFilled);
		void StyleSetFont(int styleNumber, string fontName);
		void StyleSetFore(int styleNumber, int colour);
		void StyleSetHotSpot(int styleNumber, bool hotspot);
		void StyleSetItalic(int styleNumber, bool italic);
		void StyleSetSize(int styleNumber, int sizeInPoints);
		void StyleSetUnderline(int styleNumber, bool underline);
		void StyleSetVisible(int styleNumber, bool visible);
		void Tab();
		int TargetAsUtf8(out string s);
		void TargetFromSelection();
		int TextHeight(int line);
		int TextWidth(int styleNumber, string text);
		void ToggleCaretSticky();
		void ToggleFold(int line);
		void Undo();
		event EventHandler<NativeScintillaEventArgs> UpdateUI;
		void UpperCase();
		event EventHandler<NativeScintillaEventArgs> UriDropped;
		void UsePopUp(bool bEnablePopup);
		event EventHandler<NativeScintillaEventArgs> UserListSelection;
		void UserListShow(int listType, string list);
		void VCHome();
		void VCHomeExtend();
		void VCHomeRectExtend();
		void VCHomeWrap();
		void VCHomeWrapExtend();
		int VisibleFromDocLine(int docLine);
		int WordEndPosition(int position, bool onlyWordCharacters);
		void WordLeft();
		void WordLeftEnd();
		void WordLeftEndExtend();
		void WordLeftExtend();
		void WordPartLeft();
		void WordPartLeftExtend();
		void WordPartRight();
		void WordPartRightExtend();
		void WordRight();
		void WordRightEnd();
		void WordRightEndExtend();
		void WordRightExtend();
		int WordStartPosition(int position, bool onlyWordCharacters);
		int WrapCount(int docLine);
		event EventHandler<NativeScintillaEventArgs> Zoom;
		void ZoomIn();
		void ZoomOut();
	}
}

